package com.ruoyi.exam.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.exam.domain.ExamQuestionBank;
import com.ruoyi.exam.vo.BankProgressInfoVo;
import com.ruoyi.exam.vo.ExamQuestionBankVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 题库Mapper接口
 *
 * @author Tellsea
 * @date 2025-05-30
 */
public interface ExamQuestionBankMapper extends BaseMapper<ExamQuestionBank> {

    Page<ExamQuestionBankVo> queryList(Page<?> page, @Param("entity") ExamQuestionBankVo entity);

    List<ExamQuestionBankVo> queryList(@Param("entity") ExamQuestionBankVo entity);

    ExamQuestionBankVo queryById(@Param("id") Long bankId);

    List<ExamQuestionBankVo> myCategoryList(@Param("entity") ExamQuestionBankVo entity, @Param("userId") Long userId);

    /**
     * 查询我的题库列表（通过用户关联的班次->课程->题库）
     *
     * @param userId 用户ID
     * @return 题库列表
     */
    List<ExamQuestionBankVo> myQuestionBankList(@Param("userId") Long userId);

    /**
     * 查询题库进度信息（题目总数和用户答题情况）
     *
     * @param bankId 题库ID
     * @param userId 用户ID
     * @return 题库进度信息
     */
    BankProgressInfoVo getBankProgressInfo(@Param("bankId") Long bankId, @Param("userId") Long userId);

    /**
     * 查询用户在指定题库的学习天数
     *
     * @param bankId 题库ID
     * @param userId 用户ID
     * @return 学习天数
     */
    Long getStudyDays(@Param("bankId") Long bankId, @Param("userId") Long userId);

    /**
     * 查询用户本周答题打卡情况
     *
     * @param userId 用户ID
     * @param startDate 本周开始日期
     * @param endDate 本周结束日期
     * @return 答题日期和数量列表
     */
    List<java.util.Map<String, Object>> getWeeklyCheckIn(@Param("userId") Long userId, 
                                                           @Param("startDate") String startDate, 
                                                           @Param("endDate") String endDate);

}
